package bite;

import java.util.Locale;
import java.util.Scanner;

/**
 * Creared with IntelliJ IDEA.
 * Description:字符串通配符   问题描述：在计算机中，通配符一种特殊语法，广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
 * 要求：
 * 实现如下2个通配符：
 * *：匹配0个或以上的字符（注：能被*和?匹配的字符仅由英文字母和数字0到9组成，下同）
 * ？：匹配1个字符
 *
 * 注意：匹配时不区分大小写。
 * User:yxd
 * Date:2022-04-18
 * Time:14:47
 */
public class Day18_2 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String str1 = input.next();
        String sub1 = input.next();
        String str = str1.toLowerCase();
        String sub = sub1.toLowerCase();
        //状态定义F(i,j)表示i个字符和j个字符是否能够匹配上  i 表示被匹配的字符,j表示含有通配符的字符串
        //状态转移方程F(i,j)  如果第i个字符和第j个字符匹配了  就看第i-1和第j-1个字符是否匹配,不匹配直接就是false,如果是*就看i-1,j和i,j- 1中有没有匹配的,有就是true
        //如果是?就看第i-1和j-1个字符是否匹配如果上一个匹配了这个?也可以匹配,如果不能匹配那就不能匹配
        //赋初值F(0,0)是true第一行中如果是*看前一个,如果是?看前一个,如果是字符就是false   第一列全是false空不能和字符匹配
        boolean[][] dp = new boolean[sub.length() + 1][str.length() + 1];
        dp[0][0] = true;
        for (int i = 0; i <= sub.length(); i++) {
            for(int j = 1;j <= str.length();j ++){
                if(str.charAt(j - 1) == '*'){
                    if(i == 0){
                        dp[i][j] = dp[i][j - 1];
                    }else{
//                        if(str.charAt(j - 1) == sub.charAt(i - 1)){
//                            dp[i][j] = dp[i - 1][j - 1];
//                        }else if(Character.isLetterOrDigit(sub.charAt(i - 1))){
//                            dp[i][j] = dp[i - 1][j] || dp[i][j - 1];
//                        }
                        if(Character.isLetterOrDigit(sub.charAt(i - 1))){//是或者字母数字
                            dp[i][j] = dp[i - 1][j] || dp[i][j - 1] || dp[i - 1][j - 1];
                         }
                    }
                }else{
                    if(i > 0 && ((str.charAt(j - 1) == '?') ||(str.charAt(j - 1) == sub.charAt(i - 1)))){
                        dp[i][j] = dp[i - 1][j - 1];
                    }
                }

            }
        }
        /*for(int i = 1;i <= str.length();i ++){//不知道哪里有问题
            if(str.charAt(i) == '*'){
                dp[0][i] = true;
            }else{
                dp[0][i] = false;
            }
        }
        for(int i = 1;i <= sub.length();i ++){
            dp[i][0] = false;
        }
        for(int i = 1;i <= sub.length();i ++){
            for(int j = 0;j <= str.length();j ++){
                if(str.charAt(j - 1) == '*'){
                    dp[i][j] = dp[i - 1][j] | dp[i][j - 1];
                }else if(str.charAt(j - 1) == '?'){
                    dp[i][j] = dp[i - 1][j - 1];
                }else if(str.charAt(j - 1) == sub.charAt(i - 1)){
                    dp[i][j] = dp[i - 1][j - 1];
                }else{
                    dp[i][j] = false;
                }
            }
        }*/
        System.out.println(dp[sub.length()][str.length()]);
    }
}
